<?php
	//您还未进行实名认证
	//拿到微信给我们的所有参数  验证服务器地址的有效性
	// 时间戳
	$timestamp = $_GET["timestamp"];
	// 随机数
    $nonce     = $_GET["nonce"];
	//微信加密签名
	$signature = $_GET["signature"];
	$token     = "lllc";
	// 随机字符串
	$echostr   = $_GET["echostr"];
	//进行字典序排序
	//定义一个数组
	$array = array($token,$timestamp,$nonce);
	//按照字典序排序
	sort($array,SORT_STRING);
	//拼接成字符串
	$string = implode($array);
	//进行sha1加密得到自己生成的签名
	$sign = sha1($string);
	//与传过来的签名进行对比判断是否相同
	if($signature == $sign){
        //如果签名相同，则验证成功输出echostr
    	echo $echostr;
    }
	$postStr = $GLOBALS['HTTP_RAW_POST_DATA'];
  	if (!empty($postStr)) {//检测是否为空
    // 验证XML文件是否合法
  	libxml_disable_entity_loader(true);
    // 解析XML文件  成对象
  	$postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
  	  // msgtype 消息类型
  		$MsgType = $postObj->MsgType;
  // 分情况 通过switch来写不同的回复
  	switch ($MsgType) {
    	case 'event':
     	 // 消息类型为事件
    		echo  handleEvent($postObj);
     	 break;
    	case 'text':
    	echo  handleText($postObj);
     	 break;
    	case 'image':
    		echo  handleImage($postObj);
     	 break;
    	case 'voice':
    	echo  handleVoice($postObj);
     	 break;
    	default:
     	 echo "";
     	 break;
  		}
  	}
  //-------------**** 处理事件类型的消息函数
  function handleEvent($postObj){
  // 发送方 -->用户
    $FromUserName = $postObj->FromUserName;
  // 接收方 -->服务器放
    $ToUserName = $postObj->ToUserName;
  // 消息创建时间
    $time = time();
  // 被动回复消息类型
    $event = $postObj->Event;
  // 根据event类型来做不同的处理
    switch ($event) {
      case 'CLICK':
          // 获取key值
          $eventKey = $postObj->EventKey;
            if ($eventKey == "duck") {
                $str ='<xml>
                    <ToUserName><![CDATA['.$FromUserName.']]></ToUserName>
                    <FromUserName><![CDATA['.$ToUserName.']]></FromUserName>
                    <CreateTime>'.$time.'</CreateTime>
                    <MsgType><![CDATA[text]]></MsgType>
                    <Content><![CDATA[打死你]]></Content>
                  </xml>';
                  return $str;
      }else if ($eventKey == "sendImage") {
        $str = '<xml>
				<ToUserName><![CDATA['.$FromUserName.']]></ToUserName>
				<FromUserName><![CDATA['.$ToUserName.']]></FromUserName>
				<CreateTime>'.$time.'</CreateTime>
				<MsgType><![CDATA[image]]></MsgType>
				<Image>
				<MediaId><![CDATA[yoyoAVF8xk1mm1OnfWLiCRzzKO2T67kH-chpFZYMV_GH647aKk8sEJMAWXWoZ3hs]]></MediaId>
				</Image>
				</xml>';
        return $str;
      }
      break;
      case 'subscribe':
          // 关注时回复的消息
          $str =<<<AAAA
          <xml>
            <ToUserName><![CDATA[$FromUserName]]></ToUserName>
            <FromUserName><![CD   从v  ATA[$ToUserName]]></FromUserName>
            <CreateTime>$time</CreateTime>
            <MsgType><![CDATA[text]]></MsgType>
            <Content><![CDATA[爱吆外私房烘焙欢迎您]]></Content>
          </xml>
AAAA;
          return $str;
          break;
      default:
        break;
    }
  }

//-------------**** 处理语音的函数
	function handleVoice($postObj){
  // 发送方 -->用户
    $FromUserName = $postObj->FromUserName;
  // 接收方 -->服务器放
    $ToUserName = $postObj->ToUserName;
  // 消息创建时间
    $time = time();
  // 素材id
    $MediaId = $postObj->MediaId;
    $str ='<xml>
      <ToUserName><![CDATA['.$FromUserName.']]></ToUserName>
      <FromUserName><![CDATA['.$ToUserName.']]></FromUserName>
      <CreateTime>'.$time.'</CreateTime>
      <MsgType><![CDATA[voice]]></MsgType>
      <Voice>
      <MediaId><![CDATA['.$MediaId.']]></MediaId>
      </Voice>
    </xml>';
    return $str;
}
//-------------**** 处理图片的函数
function handleImage($postObj){
  // 发送方 -->用户
    $FromUserName = $postObj->FromUserName;
  // 接收方 -->服务器放
    $ToUserName = $postObj->ToUserName;
  // 消息创建时间
    $time = time();
  //图片链接
    $PicUrl = $postObj->PicUrl;
  // 素材id
    $MediaId = $postObj->MediaId;
    $str =<<<AAA
    <xml>
      <ToUserName><![CDATA[$FromUserName]]></ToUserName>
      <FromUserName><![CDATA[$ToUserName]]></FromUserName>
      <CreateTime>$time</CreateTime>
      <MsgType><![CDATA[image]]></MsgType>
      <Image>
      <MediaId><![CDATA[$MediaId]]></MediaId>
      </Image>
    </xml>
AAA;
    return $str;
}
//-------------**** 处理文本的函数
function handleText($postObj){
  // 发送方 -->用户
    $FromUserName = $postObj->FromUserName;
  // 接收方 -->服务器放
    $ToUserName = $postObj->ToUserName;
  // 消息创建时间
    $time = time();
  // 获取用户发送给公众号的文字
  $Content = $postObj->Content;
    if ($Content == "你") {
      $str =<<<AAAA
        <xml>
          <ToUserName><![CDATA[$FromUserName]]></ToUserName>
          <FromUserName><![CDATA[$ToUserName]]></FromUserName>
          <CreateTime>$time</CreateTime>
          <MsgType><![CDATA[text]]></MsgType>
          <Content><![CDATA[瓜皮]]></Content>
        </xml>
AAAA;
      return $str;
    }
}
  ?>
